import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '@/components/Login'
import Home from '@/components/Home'
import Welcome from '@/components/Welcome'
import Users from '@/components/Users/Users'
import Roles from '@/components/Roles/Roles'
import Rights from '@/components/Rights/Rights'
import CateGories from '@/components/CateGories/CateGories'
import Goods from '@/components/Goods/Goods'
import Params from '@/components/Params/Params'
Vue.use(VueRouter)

const routes = [
  {
    // 重定向页面，如果访问的为"/"则重定向到登录页
    path: '/', // 地址
    redirect: '/login'
  },
  {
    path: '/login', // 地址
    component: Login // 注意component没得s
  },
  {
    path: '/home', // 地址
    component: Home, // 注意component没得s
    redirect: '/welcome', // 只要访问home组件就重定向到welcome
    children: [{
      path: '/welcome', // 地址
      component: Welcome // 注意component没得s
    },
    {
      path: '/users', // 地址
      component: Users // 注意component没得s
    },
    {
      path: '/roles', // 地址
      component: Roles // 注意component没得s
    },
    {
      path: '/rights', // 地址
      component: Rights // 注意component没得s
    },
    {
      path: '/categories', // 地址
      component: CateGories // 注意component没得s
    },
    {
      path: '/goods', // 地址
      component: Goods // 注意component没得s
    },
    {
      path: '/params', // 地址
      component: Params // 注意component没得s
    }]
  }
]

const router = new VueRouter({
  routes
})

// 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

// 挂载路由导航守卫
// 为路由添加一个router.beforeEach导航守卫
router.beforeEach((to, from, next) => {
  /**
   * to：将要访问的路径
   * from：代表从那个路径来的（上级路径）
   * next：是一个函数，表示放行
   * 1：next() // 放行
   * 2：next('/login') // 强制跳转到登陆
   */
  // 如果用户访问的登录页，直接放行
  if (to.path === '/login') {
    next()
  }
  // 从sessionStorage中获取token
  const tokenStr = window.sessionStorage.getItem('Token')
  // 没有token强制跳到登录页
  if (!tokenStr) {
    next('/login')
  } else {
    next()
  }
})

export default router
